From b964607dcea62606ed0e596d1d433cacaf68b9fd Mon Sep 17 00:00:00 2001 From: Ed Sanders Date: Fri, 30 Mar 2018 20:56:59 +0100 Subject: [PATCH] Use fallback languages in ResourceLoaderImage Bug: T191120 Change-Id: Ic72aead466c12d344bac359654e6dcc7f0e5c8cb --- .../resourceloader/ResourceLoaderImage.php | 24 +++++++++++++++---- .../ResourceLoaderImageTest.php | 4 ++++ 2 files changed, 23 insertions(+), 5 deletions(-) diff --git a/includes/resourceloader/ResourceLoaderImage.php b/includes/resourceloader/ResourceLoaderImage.php index 072ae7944b..d38a175008 100644 --- a/includes/resourceloader/ResourceLoaderImage.php +++ b/includes/resourceloader/ResourceLoaderImage.php @@ -130,13 +130,27 @@ class ResourceLoaderImage { $desc = $this->descriptor; if ( is_string( $desc ) ) { return $this->basePath . '/' . $desc; - } elseif ( isset( $desc['lang'][$context->getLanguage()] ) ) { - return $this->basePath . '/' . $desc['lang'][$context->getLanguage()]; - } elseif ( isset( $desc[$context->getDirection()] ) ) { + } + if ( isset( $desc['lang'] ) ) { + $contextLang = $context->getLanguage(); + if ( isset( $desc['lang'][$contextLang] ) ) { + return $this->basePath . '/' . $desc['lang'][$contextLang]; + } + $fallbacks = Language::getFallbacksFor( $contextLang ); + foreach ( $fallbacks as $lang ) { + // Images will fallback to 'default' instead of 'en', except for 'en-*' variants + if ( + ( $lang !== 'en' || substr( $contextLang, 0, 3 ) === 'en-' ) && + isset( $desc['lang'][$lang] ) + ) { + return $this->basePath . '/' . $desc['lang'][$lang]; + } + } + } + if ( isset( $desc[$context->getDirection()] ) ) { return $this->basePath . '/' . $desc[$context->getDirection()]; - } else { - return $this->basePath . '/' . $desc['default']; } + return $this->basePath . '/' . $desc['default']; } /** diff --git a/tests/phpunit/includes/resourceloader/ResourceLoaderImageTest.php b/tests/phpunit/includes/resourceloader/ResourceLoaderImageTest.php index 838d2c087f..35c3ef6454 100644 --- a/tests/phpunit/includes/resourceloader/ResourceLoaderImageTest.php +++ b/tests/phpunit/includes/resourceloader/ResourceLoaderImageTest.php @@ -39,7 +39,9 @@ class ResourceLoaderImageTest extends ResourceLoaderTestCase { [ 'mno', 'ar', 'mno-rtl.svg' ], [ 'mno', 'he', 'mno-ltr.svg' ], [ 'pqr', 'en', 'pqr-b.svg' ], + [ 'pqr', 'en-gb', 'pqr-b.svg' ], [ 'pqr', 'de', 'pqr-f.svg' ], + [ 'pqr', 'de-formal', 'pqr-f.svg' ], [ 'pqr', 'ar', 'pqr-f.svg' ], [ 'pqr', 'fr', 'pqr-a.svg' ], [ 'pqr', 'he', 'pqr-a.svg' ], @@ -53,7 +55,9 @@ class ResourceLoaderImageTest extends ResourceLoaderTestCase { public function testGetPath( $imageName, $languageCode, $path ) { static $dirMap = [ 'en' => 'ltr', + 'en-gb' => 'ltr', 'de' => 'ltr', + 'de-formal' => 'ltr', 'fr' => 'ltr', 'he' => 'rtl', 'ar' => 'rtl', -- 2.20.1